package com.pan.admin.generator.util;

import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;

import java.util.Arrays;

/**
 * @author Pan
 */
public class ApiGenAIUtils {

    public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
        String key = "";
        Generation gen = new Generation();

        String text = """
            我需要将这一段内容转换成特定的JSON结构格式我会告诉你具体规则.
            需要自动识别"字段名称", "字段类型", "字段中文名称"返回给我.
            JSON格式如下:
            listField:[
             {
                mappingName, '识别的字段名称',
                javaType: '识别的字段类型(必须首字母大写)',
                javaDoc, '识别的字段中文名称',
             }
            ]
        """;
        Message systemMsg = Message.builder()
            .role(Role.SYSTEM.getValue())
            .content(text)
        .build();

        String userText = """
                mobile
                String
                是
                17711223344
                手机号/或者手机号MD5值
                mobileMask
                String
                否
                
                177112233**
                手机号9位掩码
                name
                string
                是
                测试
                姓名
                city
                string
                是
                上海
                城市  不带"市"
                nativePlace
                string
                否
                1
                是否本地户籍，0:非本地户籍、1:本地户籍
                limitScope
                int
                
                是
                3
                额度范围( 2:''3万-5万'' ；3: ''5万-10万''  ；4: ''10万-20万'' ; 5: ''20万-50万'' ;6:''50万以上''   )（额度大于 3w）
                sex
                int
                是
                1
                性别 1-男 2-女
                age
                String
                是
                25
                年龄（25-55之间）
                osType
                String
                是
                1
                设备标识(0 安卓 1苹果)(没有的情况下默认给0)
                deviceId
                String
                是
                1dfghh
                
                设备id，可传空字符串（长度32以内）
                ip
                string
                否
                127.0.0.1
                用户ip
                ipCity
                string
                否
                上海
                记录ip城市
                chooseCity
                string
                否
                上海
                记录手选城市
                gpsCity
                string
                否
                上海
                录gps城市
                phoneCity
                string
                否
                上海
                记录手机归属地城市
                sesame
                
                string
                
                是
                4
                芝麻分 1:无芝麻分 4：700分以上 5:650分以下 6：650-700分
                car
                
                int
                否
                1
                车产类型 (1无 2全款 3按揭)
                carPay
                
                int
                否
                1
                车产价值  1：0-6万；2：6-15万； 3：15-20万
                job
                String
                否
                1
                职位： 1 上班族 2自由职业 3 企业主
                jobAge
                
                String
                否
                1
                工作年限    1： 6个月以下； 2 ：6-12个月； 3 ： 12 个月
                moneyType
                String
                否
                1
                工资发放形式  1： 银行转账 ；2：银行代发 ； 3：现金发放
                monthlyIncomeLevel
                int
                否
                1
                月收入区间(1: 5000以下;2: 5001-10000;3: 10001-15000;4: 15001-20000;5: 25001-30000;6: 30000元以上)
                companyAge
                
                String
                否
                1
                企业年限 1： 1年以下 ；2：1-3年 ； 3：3年以上
                house
                int
                否
                1
                1:无房产 5:有本地房产 6:有外地房产 50:都有
                accumulation
                int
                否
                1
                公积金(1:无公积金 2:6个月以下 3:6个月以上)
                social
                int
                否
                1
                社保(1:无社保 2:6个月以下 3:6个月以上)
                hasPolicy
                
                string
                否
                1
                保单 1:无 2：缴纳未满一年 3：缴纳一年以上
                jdIous
                
                string
                否
                1
                京东白条(短信流)  1:无  2:有
                jdIousRp
                string
                否
                1
                 京东白条(落地页) 1:无 2:0-5000 3:5000以上
                spendBai
                
                string
                否
                1
                花呗 1:无 2:3000以下 3:3000---1万 4:一万以上
                creditCard
                
                int
                否
                1
                信用卡额度 1：无 2：1万以下 3：1万-3万 4：3万以上
                credit
                int
                否
                1
                信用情况 1：信用良好 无逾期 2：1年内逾期少于3次 3：1年内逾期大于3次
                education
                string
                否
                1
                学历 1：高中及以下 2：专科 3：本科 4：硕士 5:博士及以上
            """;
        Message userMsg = Message.builder()
            .role(Role.USER.getValue())
            .content(userText)
        .build();

        GenerationParam param = GenerationParam.builder()
            // 若没有配置环境变量，请用百炼API Key将下行替换为：.apiKey("sk-xxx")
            .apiKey(key)
            // 模型列表：https://help.aliyun.com/zh/model-studio/getting-started/models
//                .model("qwen-plus")
            .model("qwen-turbo")
            .messages(Arrays.asList(systemMsg, userMsg))
            .resultFormat(GenerationParam.ResultFormat.MESSAGE)
        .build();
        return gen.call(param);
    }

    public static void main(String[] args) {
        try {
            GenerationResult result = callWithMessage();
            System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.err.println("错误信息："+e.getMessage());
            System.out.println("请参考文档：https://help.aliyun.com/zh/model-studio/developer-reference/error-code");
        }
        System.exit(0);
    }
}
